--[[--
类名: Vector.lua
创建日期: 2015-1-20
创建人: 陈小虎
功能描述: vector集合
修改内容：
修改日期:   
修改人:     
修改备注: 
]]
local Vector = {}

local _metaTable = {
    __index = {
        --默认加到结尾
        add = function(vec,value)
            table.insert(vec,value)
        end,
        --得到index位置值
        get = function(vec,index)
            return vec[index]
        end,
        --删除位于index位置值
        removeAt = function(vec,index)
            local count = #vec
            if index >= 1 and index <= count then
                return table.remove(vec,index) 
            end
            
        end,
        getIndex = function(vec,value)
            local count = #vec
            for i = 1,count do
                if vec[i] == value then
                    return i
                end
            end
            return 0
        end,
        --将指定位置的值修改为指定值
        setElementAt = function(vec,value,index)
            local count = #vec
            if index >= 1 then--and index <= count then
                if index > count then
                    index = count + 1
                end
                --vec[index] = value
                table.insert(vec,index,value)
                return vec[index]
            else
                return nil
            end
        end,
        
        --返回首位值
        firstElement = function(vec)
            local count = #vec
            if count >= 1 then
                return vec[1]
            else
                return nil
            end
        end,
        --返回最后一位值
        lastElement = function(vec)
            local count = #vec
            if count >= 1 then
                return vec[count]
            else
                return nil
            end
        end,
        --返回元素个数
        size = function(vec)
            local count = #vec
            return count
        end,
        --清空集合
        clear = function(vec)
            for i = 1,#vec do
                vec[i] = nil
            end
        end
    }
}

function Vector.new()
    local vec = {}
    return setmetatable(vec, _metaTable)
end

return Vector